import * as monaco from "monaco-editor";
// 定义token类型
const tokenTypes = {
  keyword: 'keyword',
  string: 'string',
  comment: 'comment'
};

// 定义关键词
const keywords = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'].map(k => k.toLowerCase());


export const language: monaco.languages.IMonarchLanguage = {
  tokenizer: {

    root: [
      [/^#.*$/, tokenTypes.comment], // 注释行
      [/^([A-Za-z]+)\s+/, { cases: { '@keywords': tokenTypes.keyword, '@default': tokenTypes.string } }], // 请求方法
      [/\S+\s*:\s*\S+/, 'meta'], // 请求头
      [/\s*\{/, { token: '', next: '@json' }], // 开始JSON部分
      [/.*$/, ''], // 其他内容（如URL）
    ],
    json: [
      [/\{/, { token: '', next: '@jsonObj' }],
      [/\[/, { token: '', next: '@jsonArray' }],
      [/\}/, { token: '', next: '@pop' }],
      [/\]/, { token: '', next: '@pop' }],
    ],
    jsonObj: [
      [/"[^"]*"/, 'variable'],
      [/\s*:\s*/, 'delimiter'],
      [/"[^"]*"/, 'string'],
      [/\s*,\s*/, 'delimiter'],
      [/\}/, { token: '', next: '@pop' }],
      [/\[/, { token: '', next: '@jsonArray' }],
      [/{/, { token: '', next: '@jsonObj' }],
      [/[0-9]+/, 'number'],
      [/(true|false|null)/, 'constant'],
    ],
    jsonArray: [
      [/"[^"]*"/, 'string'],
      [/\s*,\s*/, 'delimiter'],
      [/\]/, { token: '', next: '@pop' }],
      [/{/, { token: '', next: '@jsonObj' }],
      [/\[/, { token: '', next: '@jsonArray' }],
      [/[0-9]+/, 'number'],
      [/(true|false|null)/, 'constant'],
    ]
  },
  keywords: keywords,
  //语言大小写不敏感吗
  ignoreCase: true
};
